package com.epoint.utils.template.query;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import com.epoint.utils.JDBCUtil;
import com.epoint.utils.SQLUtil;

public class MySqlQueryPageBlur<T> extends QueryPageBlurTemplate<T>
{

    private Connection con = null;
    private ResultSet rs = null;
    private PreparedStatement ps = null;
    private T obj = null;
    private List<T> resultList = new ArrayList<>();
    
    @Override
    void getConnection() {
        con = JDBCUtil.getConnection();
    }

    /**
         * 执行sql 
     * @param sql sql
     * @param clazz 返回的对象的class文件
     * @param paramFieldMap 规定！！：  字段数据类型（如： "String_1"、"String_2"、"Integer_1"、"Integer_2"。。。。）：对应的值 
         *                                          【！！注意：1.循序一定要和sql判断时字段顺序一致，为了Map《》插入顺序不变，应使用LinkedHashMap】
         *                                          【！！注意：2.因为Map不允许填入重复key，重复的数据类型key值后面加数字值区分】
     * @return 结果
     */
    @Override
    List<T> queryPageBlurData(String sql, Class<T> clazz, Map<String, Object> linkedHashMap) {
        try {
            int i = 1;
            ps = con.prepareStatement(sql);
            // 存在查询信息
            if (!linkedHashMap.isEmpty()) {
                for(Map.Entry<String, Object> map : linkedHashMap.entrySet()) {
                    String paramType = map.getKey();
                    Object value = map.getValue();
                    if (paramType.contains("String")) {
                        ps.setString(i, (String) value);
                    } else if (paramType.contains("Integer")) {
                        ps.setInt(i, (Integer) value);
                    }
                    i ++;
                }
            }
            System.out.println("queryPageBlurData->" + ps);
            rs = ps.executeQuery();
            while(rs.next()) {
                T t = SQLUtil.queryObjectInfo(clazz, rs);
                resultList.add(t);
            }
            
        } catch (SQLException e) {
            e.printStackTrace();
            System.out.println("根据id查询对象信息模板错误！");
        }
        return resultList;
    }

    @Override
    void closeConnection() {
        try {
            JDBCUtil.closeConnection(rs, ps, con);
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("根据id查询对象信息模板连接关闭失败！");
        }
    }

    
    

}
